home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / MacPerl 5.1.3 / Mac_Perl_513_src / perl5.002 / lib / pwd.pl < prev    next >
Encoding:
Text File  |  1996-07-11  |  1.3 KB  |  69 lines  |  [TEXT/MPS ]

  1. ;# pwd.pl - keeps track of current working directory in PWD environment var
  2. ;#
  3. ;# $RCSfile: pwd.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:11 $
  4. ;#
  5. ;# $Log:    pwd.pl,v $
  6. ;#
  7. ;# Usage:
  8. ;#    require "pwd.pl";
  9. ;#    &initpwd;
  10. ;#    ...
  11. ;#    &chdir($newdir);
  12.  
  13. package pwd;
  14.  
  15. sub main'initpwd {
  16.     if ($^O eq 'MacOS') {
  17.     chop($ENV{'PWD'} = `pwd`);
  18.     return;
  19.     } 
  20.     if ($ENV{'PWD'}) {
  21.     local($dd,$di) = stat('.');
  22.     local($pd,$pi) = stat($ENV{'PWD'});
  23.     if ($di != $pi || $dd != $pd) {
  24.         chop($ENV{'PWD'} = `pwd`);
  25.     }
  26.     }
  27.     else {
  28.     chop($ENV{'PWD'} = `pwd`);
  29.     }
  30.     if ($ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|) {
  31.     local($pd,$pi) = stat($2);
  32.     local($dd,$di) = stat($1);
  33.     if ($di == $pi && $dd == $pd) {
  34.         $ENV{'PWD'}="$2$3";
  35.     }
  36.     }
  37. }
  38.  
  39. sub main'chdir {
  40.     local($newdir) = shift;
  41.     if ($^O eq 'MacOS') {
  42.         if (chdir $newdir) {
  43.         chop($ENV{'PWD'} = `pwd`);
  44.     }
  45.     return;
  46.     } 
  47.     $newdir =~ s|/{2,}|/|g;
  48.     if (chdir $newdir) {
  49.     if ($newdir =~ m#^/#) {
  50.         $ENV{'PWD'} = $newdir;
  51.     }
  52.     else {
  53.         local(@curdir) = split(m#/#,$ENV{'PWD'});
  54.         @curdir = '' unless @curdir;
  55.         foreach $component (split(m#/#, $newdir)) {
  56.         next if $component eq '.';
  57.         pop(@curdir),next if $component eq '..';
  58.         push(@curdir,$component);
  59.         }
  60.         $ENV{'PWD'} = join('/',@curdir) || '/';
  61.     }
  62.     }
  63.     else {
  64.     0;
  65.     }
  66. }
  67.  
  68. 1;
  69.